package Model;

import java.awt.Color;

/**
 * 
 * A hangyaboly felelős azért, hogy új hangyák kerüljenek be a pályára.
 * Számolja az eltelt köröket, és minden harmadik körben egy körülötte lévő léphető mezőre hangyát helyez el a legutóbbi esetre emlékezve,
 * az óramutató járásával megegyezően következő mezőre rakja a hangyát (amennyiben az szabad, egyébként addig próbálkozik amíg nem tudja lerakni egy körülötte lévő mezőre).
 *
 */

public class Hangyaboly extends NemMozgoDinEntitas
{	
	/** Az utolsó Hangya lerakása óta történt tick függvényhívások száma. */
	private int elteltIdo;
	/** Tárolja, hogy az előzőekben melyik irányba történt a Hangya lerakása. */
	private int utolsoIndex;
	
	/**
	 * A Hangyaboly osztály paraméteres konstruktora.
	 * @param ny Referencia egy INyilvántartó interfészt megvalósító objektumra.
	 */
	public Hangyaboly(INyilvantarto ny)
	{
		super(ny);
		elteltIdo = 0;
		utolsoIndex = 0;
		color = Color.ORANGE;
	}

	/**
	 * Létrehoz egy Hangyát és a lerakja egy léphető szomszédos Mezőre a szabályokban meghatározott módon.
	 */
	public void hangyatTeremt()
	{
		Hangya h = new Hangya(nyilvantarto);
		
		int probak = 0;
		while(!holvagyok.getSzomszedok().get(utolsoIndex).getEntitasok().isEmpty())
		{
			utolsoIndex = (utolsoIndex + 1) % 6;
			probak++;
			//Ha minden szomszédos mező foglalt
			if(probak > 5)
			{
				utolsoIndex = 0;
				return;
			}
		}
		
		utolsoIndex %= 6;
		
		h.iderak(holvagyok.getSzomszedok().get(utolsoIndex));
	}

	/**
	 * Inkrementálja az eltelt időt, és ha ez eléri a szabályokban lefektetett mennyiséget akkor új Hangyát rak le.
	 */
	public void tick()
	{
		if(elteltIdo == 10)
		{
			hangyatTeremt();
			elteltIdo = 0;
		}
		else elteltIdo++;
		holvagyok.ittVan(this);
	}
	
	public String kiir()
	{
		return "HB(" + azonosito + ")";
	}
	
	public void ittVan(Szag sz)
	{
		sz.ittVan(this);
	}
	public void ittVan(Kavics k)
	{
		//
	}
}